package base.thread_JUC2.chapter02.demo02;

public class Cinema {
	
	/**
	 * vacanciesCinema1 电影院1余票
	 * vacanciesCinema2 电影院2余票
	 */
	private long vacanciesCinema1;
	private long vacanciesCinema2;

	/**
	 * controlCinema1 电影院1的锁对象
	 * controlCinema2 电影院2的锁对象
	 */
	private final Object controlCinema1, controlCinema2;
	
	/**
	 * 分别构造两把锁，和两个电影院的余票
	 */
	public Cinema(){
		controlCinema1=new Object();
		controlCinema2=new Object();
		vacanciesCinema1=20;
		vacanciesCinema2=20;
	}
	
	/**
	 * 模拟售票（电影院1票）
	 */
	public boolean sellTickets1 (int number) {
		synchronized (controlCinema1) {
			if (number<vacanciesCinema1) {// 剩余影票多余本次售卖张数
				vacanciesCinema1-=number;
				System.out.println(Thread.currentThread().getName()+" 卖了电影院1票数---"+number);
				return true;
			} else {
				return false;
			}
		}
	}
	
	/**
	 * 模拟售票（电影院2）
	 */
	public boolean sellTickets2 (int number){
		synchronized (controlCinema2) {
			if (number<vacanciesCinema2) {
				vacanciesCinema2-=number;
				System.out.println(Thread.currentThread().getName()+" 卖了电影院2票数---"+number);
				return true;
			} else {
				return false;
			}
		}
	}
	
	/**
	 * 模拟 退票（电影院1）
	 */
	public boolean returnTickets1 (int number) {
		synchronized (controlCinema1) {
			vacanciesCinema1+=number;
			System.out.println(Thread.currentThread().getName()+" 退票------电影院1票数---"+number);
			return true;
		}
	}

	/**
	 * 模拟退票（电影院2）
	 */
	public boolean returnTickets2 (int number) {
		synchronized (controlCinema2) {
			vacanciesCinema2+=number;
			System.out.println(Thread.currentThread().getName()+" 退票------电影院2票数---"+number);
			return true;
		}
	}

	/**
	 * 获取电影院1的余票
	 */
	public long getVacanciesCinema1() {
		return vacanciesCinema1;
	}

	/**
	 * 获取电影院2的余票
	 */
	public long getVacanciesCinema2() {
		return vacanciesCinema2;
	}

}